//
//  Problem415.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/3/28.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 415. 字符串相加
 给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。

 提示：
 num1 和num2 的长度都小于 5100
 num1 和num2 都只包含数字 0-9
 num1 和num2 都不包含任何前导零
 你不能使用任何內建 BigInteger 库， 也不能直接将输入的字符串转换为整数形式
 */
@objcMembers class Problem415: NSObject {
    func solution() {
        print(addStrings("123", "345"))
        print(addStrings("1", "345"))
        print(addStrings("12", "3457"))
        print(addStrings("99", "3999"))
        print(addStrings("0", "3999"))
    }
    
    /*
     1: 把2个字符串的左边的字符挨个相加
     2: 当>=10时，需要进位 n=1； 其他n=0
     3: 注意最后时进位=1需要加上 9+1 = 10
     */
    func addStrings(_ num1: String, _ num2: String) -> String {
        var n = 0       // 进位
        let charts1 = Array(num1)
        let charts2 = Array(num2)
        var str  = ""
        var end1 = charts1.count - 1
        var end2 = charts2.count - 1
        
        while end1 >= 0 || end2 >= 0 {
            var n1 = 0
            if end1 >= 0 {
                n1 = Int(charts1[end1].asciiValue!) - 48
            }
            var n2 = 0
            if end2 >= 0 {
                n2 = Int(charts2[end2].asciiValue!) - 48
            }
            
            let value = n + n1 + n2
            if value >= 10 {
                str = String(value-10) + str
                n = 1
            } else {
                str = String(value) + str
                n = 0
            }
            
            
            end1 -= 1
            end2 -= 1
        }
        if n != 0 {
            return "1" + str
        } else {
            return str
        }
    }
}
